# -*- coding: utf-8 -*-

import random
import roughset as rs

# QuickReduct用算法提取一个相对缩放候选函数
def quick_reduct(dt, dec_class):
    reduct_candidate = set()  # 初始化 简约候选
    cond_ids = list(range(1, len(dt[0])-1)) # 条件属性的id列表（工作用）  [1,2,3,4.....16]
    print('cond_ids1',cond_ids)
    random.shuffle(cond_ids)    #   随机打乱元素的排序
    print('cond_ids2',cond_ids)

    # 条件属性 确定使用所有条件属性时的 近似质量
    qs = rs.make_partition(dt, cond_ids)
    print('qs',qs)
    # 调用计算近似质量的函数
    gamma_c = rs.calc_quality_of_approximation_by_partition(dt, qs, dec_class)  #   元组，集合
    print('gamma_c',gamma_c)

    # QuickReduct用算法求简约候选
    gamma_reduct = 0  # 分割近似质量的初始化
    while gamma_reduct < gamma_c:
        # 随机选择一个不包含在简约候选中的条件属性（各自创建）
        attr = random.choice
        # 将所选属性添加到简约候选中（各自创建）
        reduct_candidate.add(attr)
        # 根据目前的简约候选求出近似的质量（各自制作）
        rs.calc_quality_of_approximation_by_partition()

    return reduct_candidate

dt = rs.read_decision_table_from_csvfile('./zoo-type.csv')  # 从csv文件创建决定表
print(dt)
print(type(dt))     #<class 'list'>
print(len(dt))      #102
print(dt[0])        #('animals', 'hair', 'feathers', 'eggs', 'milk', 'airborne', 'aquatic', 'predator', 'toothed'
print(len(dt[0]))   #18

# 创建决定类别
d = set()
d.add(len(dt[0])-1)
print('*****')
print(d)    #{17}

dec_class = rs.make_partition(dt, d)
print(dec_class)    #[{1, 2, 4, 5, 6, 7, 10, 11, 18, 20, 23, 28,
print(type(dec_class))  #<class 'list'>
print(len(dec_class))       # 7

quick_reduct(dt,dec_class)

# reduct = quick_reduct(dt, dec_class)
# print("计算结果：", reduct)
# partition = rs.make_partition(dt, reduct)
# print("近似质量={0}".format(rs.calc_quality_of_approximation_by_partition(dt, partition, dec_class)))

